//package com.lb.service;
//
//import static com.lb.base.constants.RedisConstants.Test.TEST_EXPIRED;
//import static com.lb.base.util.DateUtils.FORMATTER_YYYY_MM_DDHH_MM_SS;
//
//import java.time.LocalDateTime;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.concurrent.TimeUnit;
//
//import org.springframework.context.ApplicationContext;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.data.redis.core.ValueOperations;
//import org.springframework.stereotype.Service;
//
//import com.lb.dao.redis.RedisKeyExpiredListener;
//
//import lombok.AllArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//
///**
// * 功能
// *
// * @author libin
// * @since 2.3.3
// */
//@Service
//@Slf4j
//@AllArgsConstructor
//public class RedisService implements RedisKeyExpiredListener {
//
//    private final RedisTemplate<String, String> delayRedisTemplate;
//
//    private final ApplicationContext applicationContext;
//
//
//    @Override
//    public boolean match(String key) {
//
//        return key.startsWith(TEST_EXPIRED);
//    }
//
//    @Override
//    public void execute(String key, Object value) {
//
//        log.info("监听到过期key:{},时间{}", key, LocalDateTime.now().format(FORMATTER_YYYY_MM_DDHH_MM_SS));
//    }
//
//    /**
//     * 设置key
//     *
//     * @param key
//     * @author libin
//     * @since 2.3.3
//     */
//    public void setKey(String key) {
//
//        for (RedisTemplate value : applicationContext.getBeansOfType(RedisTemplate.class).values()) {
//        }
//
//        for (int i = 0; i < 5; i++) {
//            String newKey = TEST_EXPIRED + i;
//            log.info("新增key:{},设置时间:{}", newKey, LocalDateTime.now().format(FORMATTER_YYYY_MM_DDHH_MM_SS));
//            delayRedisTemplate.opsForValue().set(newKey, "哈哈", 1, TimeUnit.MINUTES);
//        }
//
//    }
//
//    public Map<String, Object> getKey(String key) {
//
//        Map<String, Object> map = new HashMap<>();
//        Boolean aBoolean = delayRedisTemplate.hasKey(key);
//        if (aBoolean) {
//            String value = delayRedisTemplate.opsForValue().get(key);
//            Long expire = delayRedisTemplate.getExpire(key);
//            map.put("value", value);
//            map.put("expire", expire);
//        }
//        return map;
//    }
//
//    public String getAutoIncreSerialNumber(String redisKey, int length) {
//
//        ValueOperations<String, String> operations = delayRedisTemplate.opsForValue();
//        operations.increment(redisKey, 1L);
//        String value = operations.get(redisKey).toString();
//
//        String numStr = addZero(value, length);
//        if (getMaxNumber(length).equals(numStr)) {
//            log.info("the serialNumber is maxNum, reset the key {}", redisKey);
//            delayRedisTemplate.delete(redisKey);
//        }
//        log.info("the serialNumber is {}", numStr);
//        return numStr;
//    }
//
//    /**
//     * 根据位数生成最大值
//     *
//     * @param len
//     * @return
//     */
//    private String getMaxNumber(int len) {
//
//        StringBuffer rStr = new StringBuffer();
//        for (int i = 0; i < len; i++) {
//            rStr.append("9");
//        }
//        return rStr.toString();
//    }
//
//    // 根据位数自动补零
//    private String addZero(String numStr, Integer maxNum) {
//
//        int addNum = maxNum - numStr.length();
//        StringBuffer rStr = new StringBuffer();
//        for (int i = 0; i < addNum; i++) {
//            rStr.append("0");
//        }
//        rStr.append(numStr);
//        return rStr.toString();
//    }
//
//}